// Function.prototype.myBind = function () {
//   let _this = this
//   let args = Array.from(arguments)
//   const newThis = args.shift()
//   return function () {
//     return _this.call(newThis, ...args)
//   }
// }
// var a = 'window aaaaaaaaaaaaaaaaaaa'
// function fn(a,b,c) {
//   console.log(this.a)
//   console.log(a)
//   console.log(b)
//   console.log(c)
// }
// var obj = {
//   a: 'obj aaaaaa'
// }

// const fn_1 = fn.myBind(obj, 1,2,3)
// fn_1()
// fn()

function fn() {
  console.log(this)
}

const obj = {
  fn
}

// obj.fn()

// obj.fn.bind(111)()

function foo(a) {
  this.a = a
}

const obj1 = {}

let bar = foo.bind(obj1)
bar(2)
console.log(obj1.a)

let baz = new bar(3)

console.log(baz.a)
console.log(obj1.a)

